// package org.zebra.tenant;
//
// import cn.hutool.core.util.StrUtil;
// import org.apache.dubbo.common.constants.CommonConstants;
// import org.apache.dubbo.common.extension.Activate;
// import org.apache.dubbo.rpc.*;
//
// import java.io.Serializable;
//
/// **
// * @author zhanghongbin
// */
// @Activate(group = {CommonConstants.CONSUMER, CommonConstants.PROVIDER})
// public class DubboContextTenantFilter implements Filter {
//
//    @Override
//    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
//        if (RpcContext.getServiceContext().isConsumerSide()) {
//            Serializable serializable = TenantHelper.getTenantId();
//            String tenantId = "";
//            if (serializable != null) {
//                tenantId = serializable.toString();
//            }
//            RpcContext.getClientAttachment().setAttachment(TenantHelper.HEADER_TENANT_ID, tenantId);
//        } else {
//            String tenantId = RpcContext.getServerAttachment().getAttachment(TenantHelper.HEADER_TENANT_ID);
//            Serializable serializableTenantId;
//            if (TenantHelper.getIdType().equals("Integer") && !StrUtil.isEmpty(tenantId)) {
//                serializableTenantId = Integer.valueOf(tenantId);
//            } else if ("".equals(tenantId)) {
//                serializableTenantId = null;
//            } else {
//                serializableTenantId = tenantId;
//            }
//            TenantHelper.setDynamicTenantId(serializableTenantId);
//        }
//        try {
//            return invoker.invoke(invocation);
//        } finally {
//            if (RpcContext.getServiceContext().isProviderSide()) {
//                TenantHelper.clearDynamicTenantId();
//            }
//        }
//    }
// }
